Jasmine এর মাধ্যমে Mocks তৈরি করা

Mocking এবং Stubbing - জ্যাসমিনজেএস (JasmineJS) - Web Development

371

JasmineJS এ Mocks তৈরি করার মাধ্যমে আপনি টেস্টিং এর সময় নির্দিষ্ট ফাংশন বা মেথডগুলির আচরণ সিমুলেট করতে পারেন, যাতে আসল কার্যকারিতা কল না হয়। এটি unit testing এর একটি গুরুত্বপূর্ণ অংশ, যেখানে আপনি নির্দিষ্ট কম্পোনেন্টের নির্ভরশীলতা (dependencies) কাটিয়ে টেস্ট করার জন্য মক অবজেক্ট বা ফাংশন ব্যবহার করেন।

Mocking এর মাধ্যমে আপনি একটি নির্দিষ্ট ফাংশন বা মেথডের return value, call count, parameters ইত্যাদি পরীক্ষা করতে পারেন, যা বিশেষ করে external APIs বা ডাটাবেস কলের জন্য উপকারী।


JasmineJS এ Mocking এর ধারণা

JasmineJS মকিং এর জন্য spyOn() ফাংশন ব্যবহার করে থাকে। spyOn() মক ফাংশন বা মেথড তৈরি করে, যা আসল ফাংশনের আচরণ সিমুলেট করতে পারে। এটি ফাংশনের কল রেকর্ড করে এবং আপনি কলের পরিণতি বা পারামিটার পরীক্ষা করতে পারেন।


spyOn() এর ব্যবহার

spyOn() ফাংশনটি একটি মক ফাংশন বা মেথড তৈরি করতে ব্যবহৃত হয়। এটি প্রথম আর্গুমেন্ট হিসেবে একটি অবজেক্ট এবং দ্বিতীয় আর্গুমেন্ট হিসেবে একটি মেথডের নাম নেয়। এটি ওই মেথডের কাজের পরিবর্তে একটি স্পাই তৈরি করে, যা কলগুলোর আচরণ পরীক্ষা করতে সহায়তা করে।

উদাহরণ:

describe("Jasmine Mocks with spyOn", function() {
  it("should mock a method and check the result", function() {
    const obj = {
      add: function(a, b) {
        return a + b;
      }
    };

    // স্পাই ব্যবহার করে add মেথড মক করা
    spyOn(obj, 'add').and.returnValue(10);

    // মক মেথড কল করা
    const result = obj.add(3, 4);

    // মক ফাংশনের রিটার্ন ভ্যালু পরীক্ষা করা
    expect(result).toBe(10);
    expect(obj.add).toHaveBeenCalled();  // চেক করুন যে মেথডটি কল হয়েছে
    expect(obj.add).toHaveBeenCalledWith(3, 4);  // চেক করুন যে সঠিক আর্গুমেন্টের সাথে কল হয়েছে
  });
});

এখানে:

  • spyOn(obj, 'add'): এটি obj.add() মেথডের জন্য একটি স্পাই তৈরি করবে।
  • and.returnValue(10): স্পাইটি যখন কল হবে, তখন এটি 10 রিটার্ন করবে, আসল add ফাংশনের কাজ করার পরিবর্তে।
  • expect(obj.add).toHaveBeenCalled(): এটি পরীক্ষা করবে যে মেথডটি কল হয়েছে কিনা।
  • expect(obj.add).toHaveBeenCalledWith(3, 4): এটি পরীক্ষা করবে যে সঠিক আর্গুমেন্ট দিয়ে মেথডটি কল হয়েছে কিনা।

and.callThrough(): আসল ফাংশন কল করা

যখন আপনি মক ফাংশন তৈরি করবেন, তখন আপনি চাইলে আসল ফাংশনটি চালিয়ে যেতে পারেন। এর জন্য and.callThrough() ব্যবহার করা হয়।

উদাহরণ:

describe("Jasmine Mocks with callThrough", function() {
  it("should call the original function", function() {
    const obj = {
      multiply: function(a, b) {
        return a * b;
      }
    };

    spyOn(obj, 'multiply').and.callThrough();  // আসল ফাংশন চালাতে allow করবে

    const result = obj.multiply(2, 5);

    expect(result).toBe(10);  // আসল ফাংশনের কাজ
    expect(obj.multiply).toHaveBeenCalled();  // মেথডটি কল হয়েছে কিনা
  });
});

এখানে:

  • and.callThrough() ব্যবহার করা হয়েছে যাতে মক ফাংশন সত্ত্বেও আসল multiply() ফাংশনটি চালানো হয়।
  • multiply(2, 5) কল করার পর, এর সঠিক ফলাফল 10 রিটার্ন হবে, যেহেতু আসল ফাংশন কল করা হয়েছে।

and.callFake(): কাস্টম ফাংশন ব্যবহার করা

and.callFake() ব্যবহার করে আপনি একটি কাস্টম ফাংশন প্রদান করতে পারেন, যা স্পাইয়ের কল হলে চলবে। এটি আসল ফাংশনের পরিবর্তে আপনার নিজস্ব ফাংশনটিকে চালানোর সুযোগ দেয়।

উদাহরণ:

describe("Jasmine Mocks with callFake", function() {
  it("should call a fake function", function() {
    const obj = {
      subtract: function(a, b) {
        return a - b;
      }
    };

    spyOn(obj, 'subtract').and.callFake(function(a, b) {
      return a + b;  // কাস্টম লজিক (আসল লজিকের পরিবর্তে)
    });

    const result = obj.subtract(7, 3);

    expect(result).toBe(10);  // কাস্টম ফাংশনের রিটার্ন ভ্যালু
    expect(obj.subtract).toHaveBeenCalled();  // মেথডটি কল হয়েছে কিনা
    expect(obj.subtract).toHaveBeenCalledWith(7, 3);  // সঠিক আর্গুমেন্টের সাথে কল হয়েছে
  });
});

এখানে:

  • and.callFake() ব্যবহার করে একটি কাস্টম ফাংশন প্রদান করা হয়েছে, যেটি আসল subtract() ফাংশনের পরিবর্তে কল হবে। এতে আসল গাণিতিক অপারেশন পরিবর্তে আমরা a + b রিটার্ন করছি।
  • expect() দিয়ে আমরা চেক করেছি যে মেথডটি সঠিকভাবে কল হয়েছে এবং সঠিক আর্গুমেন্ট ব্যবহার করা হয়েছে।

and.stub(): মেথডকে মক করে ফেলা

and.stub() ব্যবহার করে আপনি মেথডকে পুরোপুরি মক করে ফেলতে পারেন, যাতে মেথডের কোনো আচরণ না থাকে। এটি ফাংশনের আচরণ নিয়ন্ত্রণে রাখা হয়।

উদাহরণ:

describe("Jasmine Mocks with stub", function() {
  it("should not call the original function", function() {
    const obj = {
      greet: function(name) {
        return "Hello, " + name;
      }
    };

    spyOn(obj, 'greet').and.stub();  // greet মেথডকে মক করে ফেলেছে

    const result = obj.greet("John");

    expect(result).toBeUndefined();  // মক ফাংশন রিটার্ন কিছুই করবে না
    expect(obj.greet).toHaveBeenCalled();  // মেথডটি কল হয়েছে কিনা
  });
});

এখানে:

  • and.stub() ব্যবহার করা হয়েছে যা greet() মেথডকে পুরোপুরি মক করে ফেলেছে, ফলে এটি কোনো রিটার্ন ভ্যালু প্রদান করবে না।
  • expect(result).toBeUndefined() দ্বারা যাচাই করা হয়েছে যে, মক ফাংশন কোন রিটার্ন ভ্যালু দেয়নি।

সারাংশ

JasmineJS এ মক (Mocks) তৈরি করার মাধ্যমে আপনি আপনার টেস্টিং আরো নিয়ন্ত্রিত এবং নির্দিষ্ট ফাংশন বা মেথডের আচরণ পরীক্ষা করতে পারবেন। এর জন্য মূল পদ্ধতি হলো spyOn(), যা মেথডের কল রেকর্ড করে এবং তার আচরণ পরিবর্তন করতে সাহায্য করে। আপনি বিভিন্ন ফাংশনালিটি প্রয়োগ করতে পারেন:

  • and.returnValue(): মক ফাংশনের জন্য একটি নির্দিষ্ট রিটার্ন ভ্যালু প্রদান।
  • and.callThrough(): আসল ফাংশন চালানোর অনুমতি।
  • and.callFake(): কাস্টম ফাংশন প্রদান করা।
  • and.stub(): মেথডের আচরণকে মক করে ফেলতে।

এইসব পদ্ধতি ব্যবহার করে আপনি JasmineJS এ খুবই কার্যকর এবং নির্ভরযোগ্য টেস্ট তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...